package pruebamercurial;

public class Laberinto {
    public char[][] cuerpo;
    private char cI = 'I'; //Casilla de Inicio
    private char cS = 'S'; //Casilla de Salida
    private char cC = ' '; //Casilla de Camino
    private char cM = '#'; //Casilla de Muro
    private char cB = '@'; //Casilla de Borde
             
    
    public Laberinto(int tamano){
        this.cuerpo=generarCuerpo(tamano);
    }
    
    private char[][] generarCuerpo(int tamano){
        char[][] lab = new char[tamano][tamano];
        
        // -- RELLENAR MAPA --
        //Rellenar todo
        for(int x=0;x<tamano;x++){
            for(int y=0;y<tamano;y++){
                lab[x][y] = cM;
            }
        }
        
        //Extremos
        for(int x=0;x<tamano;x++){lab[x][0] = cB;}
        for(int x=0;x<tamano;x++){lab[x][tamano-1] = cB;}
        for(int x=0;x<tamano;x++){lab[0][x] = cB;}
        for(int x=0;x<tamano;x++){lab[tamano-1][x] = cB;}
        
        
        // -- GENERAR CAMINO --
        //¿Desde dónde empieza?
        int iposx,iposy; //Posición Inicial.
        int fposx,fposy; //Posición Final.
        int aposx,aposy; //Posición Actual.
        int rana = (int)(Math.random()*4); //0 Norte, 1 Sur, 2 Este, 3 Oeste.
        int ranb = (int)(1+(Math.random()*(tamano-2))); //¿Desde qué posición empieza?
        if(rana==0){iposx=ranb; iposy=0;}
        else if(rana==2){iposx=ranb; iposy=tamano-1;}
        else if(rana==3){iposx=0; iposy=ranb;}
        else{iposx=tamano-1; iposy=ranb;}
        lab[iposx][iposy]='I'; //Coloca el carácter de inicio.
        
        //¿Por dónde va?
        aposx=iposx;
        aposy=iposy;
        while(true){
            int ranm = (int)(Math.random()*4); //¿Hacia dónde voy? 0 Norte, 1 Sur, 2 Este, 3 Oeste.
            if(aposy!=0&&lab[aposx][aposy-1]==cS){
                System.out.println("He llegado a la salida");
                break;
            }
            if(ranm==0){
                if(aposy!=0&&lab[aposx][aposy-1]==cM){
                    System.out.println("Voy hacia el Norte");
                    aposy--;
                    lab[aposx][aposy]=cC;
                }
            }
            else if(ranm==1){
                if(aposy!=tamano-1&&lab[aposx][aposy+1]==cM){
                    System.out.println("Voy hacia el Sur");
                    aposy++;
                    lab[aposx][aposy]=cC;
                }
            }
            else if(ranm==2){
                if(aposx!=0&&lab[aposx-1][aposy]==cM){
                    System.out.println("Voy hacia el Oeste");
                    aposx--;
                    lab[aposx][aposy]=cC;
                }
            }
            else{
                if(aposx!=tamano-1&&lab[aposx+1][aposy]==cM){
                    System.out.println("Voy hacia el Este");
                    aposx++;
                    lab[aposx][aposy]=cC;
                }
            }
        }
        
        
        //¿Hasta dónde llega?
        //lab[fposx][fposy]='F'; //Coloca el carácter de final.
        
        
        return lab;
    }
}
